package guiTegoNieBedzie;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.LinkedList;

import entities.KontrFirma;
import entities.KontrOsoba;
import entities.Pacjent;
import entities.Probka;
import entities.TypBadan;
import entities.TypProbki;
import entities.Pracownik;

public class ZlecenieDAO extends DAO implements ZlecenieDaoInter {

//	@Override
	public boolean dodajNoweZlecenie(Probka probka,LinkedList<TypBadan> listaBadan, int priorytet) {
		// TODO Auto-generated method stub

		Iterator<TypBadan> iterator= listaBadan.iterator();
		Pracownik zalogowanyPRacownik = new Pracownik();
		try 
		{
			while(iterator.hasNext())
			{
				String sql = "INSERT INTO Badania (priorytet,rejestratorID, probkaID, typBadanID, wyniki, dataWykonania, uwagi, dataWeryfikacji, dataOdbioru, magisterID, technikID) " +
				"	VALUES ("+priorytet+","+zalogowanyPRacownik.getId()+","+ probka.getId() +","+ iterator.next().getId() +",null,null,null,null,null,null,null)";


				//System.out.println(sql);
				this.db.dbSqlUpdate(sql);
			}
			this.db.dbCommit();
			return true;
		}
		catch (SQLException e) 
		{
			e.printStackTrace();
			try {
				this.db.dbRollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			return false;
		}

	}

//	@Override
	public LinkedList<Probka> getListaZlecen() {
		// TODO Auto-generated method stub
		
		LinkedList<Probka> listaProbek = new LinkedList<Probka>();
		
		try 
		{
			
			String sql = "SELECT Kontrahenty_prawny.nazwa AS \"Kontrahent\", Pacjent.imie AS \"Imie\", Pacjent.nazwisko AS \"Nazwisko\", Probki.probkaID AS \"ID\", Typy_probek.nazwa AS \"Typ\",Typy_probek.typProbkiID AS \"idp\", Probki.idObcy AS \"Obcy\", MAX(Badania.priorytet) AS \"Prio\"" +
					"FROM Kontrahenty_prawny INNER JOIN" +
					"     Probki ON Kontrahenty_prawny.kontrahentID = Probki.kontrahentID INNER JOIN" +
					"     Pacjent ON Probki.pacjentID = Pacjent.pacjentID INNER JOIN" +
					"     Typy_probek ON Probki.typProbkiID = Typy_probek.typProbkiID INNER JOIN " +
					"     Badania ON Probki.probkaID = Badania.probkaID    " +
					"GROUP BY Kontrahenty_prawny.nazwa,Pacjent.imie, Pacjent.nazwisko,Probki.probkaID,Typy_probek.nazwa,Typy_probek.typProbkiID,Probki.idObcy,Badania.priorytet";
			
			String sql2 = "SELECT Osoby_fizyczne.imie AS \"Imie\", Osoby_fizyczne.nazwisko AS \"Nazwisko\", Pacjent.imie AS \"Pimie\",Pacjent.nazwisko AS \"Pnazwisko\", Probki.probkaID AS \"ID\", Typy_probek.nazwa AS \"Typ\",Typy_probek.typProbkiID AS \"idp\", Probki.idObcy AS \"Obcy\", MAX(Badania.priorytet) AS \"Prio\"" +
					"FROM Osoby_fizyczne INNER JOIN" +
					"     Probki ON Osoby_fizyczne.fizycznaID = Probki.kontrahentFizycznyID INNER JOIN" +
					"     Pacjent ON Probki.pacjentID = Pacjent.pacjentID INNER JOIN" +
					"     Typy_probek ON Probki.typProbkiID = Typy_probek.typProbkiID INNER JOIN" +
					"     Badania ON Probki.probkaID = Badania.probkaID    " +
					"GROUP BY Osoby_fizyczne.imie ,Osoby_fizyczne.nazwisko,Pacjent.imie,Pacjent.nazwisko,Probki.probkaID,Typy_probek.nazwa,Typy_probek.typProbkiID,Probki.idObcy,Badania.priorytet";
			
			ResultSet wynik = this.db.dbSqlQuery( sql );
			while( wynik.next() )
			{
				Probka probka = new Probka();
				KontrFirma kontrahent = new KontrFirma();
				kontrahent.setNazwa(wynik.getString("Kontrahent"));
				probka.setKontrahent(kontrahent);
				Pacjent pacjent = new Pacjent();
				pacjent.setImie(wynik.getString("Imie"));
				pacjent.setNazwisko(wynik.getString("Nazwisko"));
				probka.setPacjent(pacjent);
				probka.setId(wynik.getInt("ID"));
				TypProbki typProbki = new TypProbki();
				typProbki.setNazwa(wynik.getString("Typ"));	
				typProbki.setId(wynik.getInt("idp"));
				probka.setTypProbki(typProbki);
				probka.setIdZewn(wynik.getString("Obcy"));
				probka.setPriortet(wynik.getInt("Prio"));
				listaProbek.add(probka);

			}	
			
			wynik = this.db.dbSqlQuery( sql2 );
			while( wynik.next() )
			{
				Probka probka = new Probka();
				KontrOsoba kontrahent = new KontrOsoba();
				kontrahent.setImie(wynik.getString("Imie"));
				kontrahent.setNazwisko(wynik.getString("Nazwisko"));
				probka.setKontrahent(kontrahent);
				Pacjent pacjent = new Pacjent();
				pacjent.setImie(wynik.getString("Pimie"));
				pacjent.setNazwisko(wynik.getString("Pnazwisko"));
				probka.setPacjent(pacjent);
				probka.setId(wynik.getInt("ID"));
				TypProbki typProbki = new TypProbki();
				typProbki.setNazwa(wynik.getString("Typ"));	
				typProbki.setId(wynik.getInt("idp"));
				probka.setTypProbki(typProbki);
				probka.setIdZewn(wynik.getString("Obcy"));
				probka.setPriortet(wynik.getInt("Prio"));
				listaProbek.add(probka);
			}	
			
			
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
		
		return listaProbek;
	}



}
